---
title: "Livecoding da(o)(e) MateBot, Robô Social (4)"
date: 2020-10-07T18:31:43-03:00
---

## Objetivos de hoje:

- [x] Abandonar long polling em favor de webhooks com a API do Telegram Bot  
- [ ] Usar webhooks também com a API do Discord  
- [ ] Fazer um bouncer (ou bridge) entre Telegram e Discord  

---

## Bibliografia (linkania):

* [Trilha sonora](https://soundcloud.com/lfzawacki/sets/stream-list)  
* [Código fonte MateBot](https://github.com/matehackers/matebot)  
* [Grupo MateBot no Telegram](https://t.me/joinchat/CwFUFkf-dKW34FPBjEJs9Q)  
* [Servidor MateBot no Discord](https://discord.gg/4ycb4WS)  
* [Documentação Aiogram](https://docs.aiogram.dev/)  
* [Documentação discord.py](https://discordpy.readthedocs.io/)  

---

## Transmissão ao vivo

Começou aproximadamente às 18:00 BRT (UTC -3) do dia 07 de outubro de 2020 
(quarta-feira já).  

Ao vivo no Youtube no canal do Matehackers: 
<https://www.youtube.com/c/Exmachinae/live>  
Ao vivo também no Discord: <https://discord.gg/yDwncrE>  


### Gravação no Youtube

* <https://www.youtube.com/watch?v=D8yQNlKwKmY>
* <https://www.youtube.com/watch?v=HWNVlnUTiQk>

---

## Aiogram Webhooks

O problema de usar long polling ao invés de Webhooks é que long polling é o que 
se chama na programação assíncrona de "blocking". Eu não consigo ter outros 
loops ou outras funções assíncronas e portanto não consigo escutar e mandar 
mensagens para o Telegram e pro Discord ao mesmo tempo, por exemplo. Na Terça 
Sem Fim de hoje o desafio é usar Webhooks com a API do Telegram e com a API do 
Discord, possibilitando que o Bot faça uma ponte entre estas duas ferramentas 
de comunicação.  

Isto também possibilitará retomar o uso de Quart/Flask no desenvolvimento, o que
(re)abre novas possibilidades.  

Começando com a implementação de webhooks no Aiogram: 
<https://docs.aiogram.dev/en/latest/examples/webhook_example.html>  

Lendo a documentação de 
[gerar certificados do Telegram](https://core.telegram.org/bots/self-signed) e 
o 
[guia de webhooks também do Telegram](https://core.telegram.org/bots/webhooks), 
concluí novamente que pra usar webhooks tem que ter uma VPS com o firewall 
configurado e certificados SSL válidos.  

Aprendi a diferença entre o **setWebhook** e o **startWebhook** do Telegram. O 
primeiro envia para o servidor do Telegram qual é o endereço externo (público) 
pra onde o servidor do Telegram vai enviar as atualizações (updates). No caso do
 servidor da denise é por exemplo _https://denise.matehackers.org/webhook_. O 
segundo método cria um servidor **aiohttp** em uma porta e um endereço. As duas 
configurações podem ser a mesma se e somente se o python puder usar um endereço 
público e uma porta pública, com um contexto SSL devidamente configurado.  

No entanto, nada na documentação dos bots do telegram explicava corretamente 
como fazer isto, ou não está bem implementado. Após muita conversa nos grupos do
 telegram com os outros desenvolvedores, cheguei à conclusão de que todo mundo 
usa o artifício mais óbvio: usar um proxy reverso (por exemplo **nginx**) pra 
configurar facilmente o contexto SSL e iniciar um webhook que só escute 
no endereço localhost (127.0.0.1).  

Eu fiz isto como teste e funcionou. No entanto, várias outras práticas de 
segurança devem ser observadas, pois estou usando um servidor de produção com 
outros serviços críticos funcionando.  

Além disto, este não é o cenário ideal para a maioria das pessoas 
desenvolvedoras de bot e usuária(o)s do MateBot. O ideal seria que o MateBot 
gerasse certificados auto assinados e criasse um contexto SSL para a(o) 
usuária(o).  

Transmissão encerrada aproximadamente às 04:45.  
